home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / grintool.i < prev    next >
Text File  |  1997-10-26  |  14KB  |  412 lines

  1. IMPLEMENTATION MODULE grinTools;
  2.  
  3. (*==============================================================*
  4.  * Modul:               Tools zum Anzeigemodul <grin>           *
  5.  * Autor:               Johannes G”ttker-Schnetmann             *
  6.  * erstellt am:         10.04.1992                              *
  7.  * letzte Žnderung am:  10.04.1992                              *
  8.  * Version:             1.0                                     *
  9.  * Interne Version:     V#0001                                  *
  10.  *==============================================================*
  11.  
  12.  *----------------------------------------------------------------------------
  13.  * Datum    Vers. Autor  Žnderung (Arbeitsbericht)                            
  14.  *----------------------------------------------------------------------------
  15.  * 10.04.92 0001  JGS    Erste Version
  16.  *----------------------------------------------------------------------------
  17.  *)
  18.  
  19. (* !!!                                                *)
  20. (* !!!                                                *)
  21. (* !!!                                                *)
  22. (* !!!  Noch vorl„ufig, das muž noch geschickter      *)
  23. (* !!!  programmiert werden!!!                        *)
  24. (* !!!                                                *)
  25. (* !!!                                                *)
  26. (* !!!                                                *)
  27.  
  28.  
  29. (* Hier sollen demn„chst auch die neuen Nachrichten erstellt werden, damit u.a. *)
  30. (* BetreffHolen aus Cat komplett entfernt werden kann/ jetzt ist BetreffHolen   *)
  31. (* hier original mit reinkopiert *)
  32.  
  33. (* Dann kann HandleComment/CopyResult und BetreffHolen aus Cat raus *)
  34.  
  35. FROM SYSTEM IMPORT ADDRESS, ADR, CADR;
  36.  
  37. IMPORT Strings;
  38.  
  39. FROM VDIUtil      IMPORT FormHandle;
  40. FROM Messages     IMPORT NewKom, NewAnswer, SendState,
  41.                          NewKomMessage, NewAnsMessage, 
  42.                          CopyOrForwardMessage;
  43. FROM Void         IMPORT v;
  44. IMPORT CatTypes;
  45. IMPORT CatGlobal;
  46. IMPORT WdwManager;
  47. IMPORT dataSys;
  48. IMPORT grin;
  49. IMPORT MausTauschrsc;
  50. IMPORT MTE;
  51. IMPORT ListHelp;
  52. IMPORT GroupSelect;
  53. IMPORT data;
  54. IMPORT AssFuncs;
  55.  
  56. IMPORT MagicAES;
  57. IMPORT MagicStrings;
  58.  
  59. IMPORT mtAlerts;
  60. IMPORT mtUtils;
  61.  
  62. CONST   sysStrTwo       = 'Kommentarzeile fr Kopie';
  63.         sysStrThree     = 'Kommentarzeile fr Weiterleitung';
  64.  
  65. (*TYPE ActionType = (comment, answer, copy, pass, otherGroup);*)
  66.  
  67. VAR wegen, system : ADDRESS;
  68.  
  69. PROCEDURE LengthOf(VAR str : ARRAY OF CHAR):CARDINAL;
  70. VAR z, l, s : INTEGER;
  71. BEGIN
  72.   l := LENGTH(str);
  73.   s := l;
  74.   FOR z := 0 TO l-1 DO
  75.     IF str[z] IN CatTypes.charSet{'Ž', '™', 'š', '„', '”', '', 'ž'} THEN INC(s) END
  76.   END;
  77.   RETURN CARDINAL(s);
  78. END LengthOf;
  79.  
  80. PROCEDURE CheckBetreff (VAR Betreff: ARRAY OF CHAR): BOOLEAN;
  81.   VAR i, len : INTEGER;
  82.       l      : CARDINAL;
  83.       ok     : BOOLEAN;
  84.       tmp    : CatTypes.String255;
  85. BEGIN
  86.   l := LengthOf(Betreff);
  87.   MagicStrings.Assign (Betreff, tmp);
  88.   Strings.DelBlanks (tmp);
  89.   IF (tmp[0] = 0C)
  90.   THEN
  91.     MTE.info (MTE.emptyWegen);
  92.     RETURN FALSE;
  93.   ELSE
  94.     (* Auf Sonderzeichen untersuchen, insbesondere CR/LF *)
  95.     i := 0;
  96.     len := LENGTH (Betreff);
  97.     ok := TRUE;
  98.     WHILE (i < len) & ok DO
  99.       ok := ORD(Betreff[i]) >= ORD(" ");
  100.       INC (i);
  101.     END;
  102.     IF ~ok
  103.     THEN
  104.       i := mtAlerts.Alert (1, MTE.wrongWegen);
  105.       IF i = 2
  106.       THEN
  107.         i := 0;
  108.         len := LENGTH (Betreff);
  109.         WHILE (i < len) DO
  110.           IF (ORD(Betreff[i]) < ORD(" "))
  111.           THEN
  112.             (* Zeichen l”schen *)
  113.             MagicStrings.Delete (Betreff, i, 1);
  114.             DEC (len, 1);
  115.           ELSE
  116.             INC (i);
  117.           END;
  118.         END;
  119.         RETURN TRUE
  120.       END;
  121.       RETURN FALSE;
  122.     END;
  123.   END;
  124.   RETURN TRUE;
  125. END CheckBetreff;
  126.  
  127. PROCEDURE BetreffHolen(grinWdw: INTEGER; VAR Betreff : ARRAY OF CHAR; REF optStr, WGruppe, preStr : ARRAY OF CHAR;
  128.                        askGrin : BOOLEAN):BOOLEAN;
  129. (* Hier vielleicht mal modernisieren, kein ADDRESS sondern VAR-Parameter.. *)
  130. VAR x,y,w,h,exit     : INTEGER;
  131.     l                : CARDINAL;
  132.     ok               : BOOLEAN;
  133. BEGIN
  134.   IF askGrin THEN grin.ActualSubject(grinWdw, Betreff) END;
  135.   (*$W-*)
  136.   mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.wgruppe, ADR(WGruppe));
  137.   mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.optstr,  ADR(optStr));
  138.   mtUtils.SetObjcStringAdr (wegen, MausTauschrsc.prestr,  ADR(preStr));
  139.   mtUtils.SetObjcString (wegen, MausTauschrsc.wegenstr, Betreff);
  140.   (*$W=*)
  141.   REPEAT
  142.     exit := FormHandle(wegen);
  143.     mtUtils.ObjcString (wegen, MausTauschrsc.wegenstr, Betreff);
  144.     IF (exit # MausTauschrsc.wegcanc) THEN
  145.       ok := CheckBetreff (Betreff);
  146.     END;
  147.   UNTIL (exit = MausTauschrsc.wegcanc) OR ok;
  148.   IF exit = MausTauschrsc.wegcanc THEN RETURN FALSE END;
  149.   RETURN TRUE;
  150. END BetreffHolen;
  151.  
  152. PROCEDURE CheckWriteAccess (REF GrName : ARRAY OF CHAR): BOOLEAN;
  153. BEGIN
  154.   IF ~GroupSelect.GetWriteAccess (GrName)
  155.   THEN
  156.     RETURN 1 = mtAlerts.Alert (1, "[1][CAT:|Sie haben fr diese Gruppe keine Schreiberlaubnis.|Trotzdem die Nachricht schreiben?][[Ja|:[Nein]");
  157.   END;
  158.   RETURN TRUE;
  159. END CheckWriteAccess;
  160.  
  161. PROCEDURE HandleCommentResult(grinWdw: INTEGER; result : ActionType);
  162. CONST wgStr = 'Wegen:';
  163. VAR Betreff : CatTypes.String255;
  164.     Gr      : CatTypes.String255;
  165.     mid,
  166.     receiver,
  167.     replyto,
  168.     realName,
  169.     sender,
  170.     txt     : CatTypes.String255;
  171.     orgGroup,
  172.     refId,
  173.     scrap   : CatTypes.String1023;
  174.     dist    : data.tDistribution;
  175.     otherReceiver: BOOLEAN;
  176.     z       : CARDINAL;
  177.  
  178. PROCEDURE MakeLine();
  179. BEGIN
  180.   grin.ActualID(grinWdw, scrap);
  181.   z := MagicStrings.Length(scrap);
  182.   IF z < 66 THEN
  183.     txt := 'Kommentar zu ';
  184.   ELSE
  185.     txt := '-';
  186.  END;
  187.  MagicStrings.Append(scrap, txt);
  188.  z := MagicStrings.Length(txt);
  189.  IF z > 80 THEN
  190.    txt[75] := 0C;
  191.    MagicStrings.Append('[..]', txt);
  192.  ELSIF z < 65 THEN
  193.    MagicStrings.Append(' in der Gruppe ', txt);
  194.    grin.ActualGroup(grinWdw, scrap);
  195.    GroupSelect.GetNetName (scrap);
  196.    MagicStrings.Append(scrap, txt);
  197.  END;
  198. END MakeLine;
  199.  
  200. BEGIN
  201.   (* Erstmal Kram holen, den wir eventuell brauchen *)
  202.   grin.ActualGroup(grinWdw, orgGroup);
  203.   grin.ActualID(grinWdw, refId);
  204.   grin.ActualMId(grinWdw, mid);
  205.   grin.ActualDist(grinWdw, dist);
  206.   grin.ActualFrom (grinWdw, receiver);
  207.   grin.ActualReplyto (grinWdw, replyto);
  208.   grin.ActualName (grinWdw, realName);
  209.   grin.ActualSender (grinWdw, sender);
  210.   IF AssFuncs.StrIequal (receiver, sender)
  211.   THEN
  212.     MagicStrings.Assign ('', sender);
  213.   END;
  214.   IF AssFuncs.StrIequal (receiver, replyto)
  215.   THEN
  216.     MagicStrings.Assign ('', replyto);
  217.   END;
  218.   otherReceiver := FALSE;
  219.  
  220.   IF result = comment THEN
  221.     MagicStrings.Assign (refId, txt);
  222.     txt[40] := 0C; IF txt[39] # 0C THEN txt[39] := 03C END;
  223.     IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Kommentar auf Nachricht:',
  224.                              txt, wgStr, TRUE) THEN     
  225.       IF GroupSelect.GetFollowUp (orgGroup, Gr)
  226.       THEN
  227.         IF CheckWriteAccess (Gr)
  228.         THEN
  229.           MakeLine();
  230.           NewKomMessage(orgGroup, Gr, Betreff, refId, txt, mid, receiver, realName);
  231.         END;
  232.       ELSE
  233.         IF CheckWriteAccess (orgGroup)
  234.         THEN
  235.           NewKom(refId, Betreff, orgGroup, mid, receiver, realName, dist);
  236.         END;
  237.       END;
  238.     END
  239.   ELSIF result = answer THEN
  240.     (* Get receiver *)
  241.     IF (replyto[0] # '')
  242.     THEN
  243.       otherReceiver := TRUE;
  244.       IF sender[0] # ''
  245.       THEN
  246.         (* Sender & Reply-To *)
  247.         MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch ein Reply-To und einen Sender gesetzt.|Reply-To: ", scrap);
  248.         MagicStrings.Append (replyto, scrap);
  249.         MagicStrings.Append ("|Sender: ", scrap);
  250.         MagicStrings.Append (sender, scrap);
  251.         MagicStrings.Append ("|An wen soll die Nachricht gehen?][[Sender|[ReplyTo|[Absender]", scrap);
  252.         v.int := mtAlerts.Alert (1, scrap);
  253.         IF v.int = 1
  254.         THEN
  255.           MagicStrings.Assign (sender, receiver);
  256.         ELSIF v.int = 2
  257.         THEN
  258.           MagicStrings.Assign (replyto, receiver);
  259.         ELSE
  260.           otherReceiver := FALSE;
  261.         END;
  262.       ELSE
  263.         (* Reply-To gesetzt *)
  264.         MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch ein Reply-To gesetzt.|Reply-To: ", scrap);
  265.         MagicStrings.Append (replyto, scrap);
  266.         MagicStrings.Append ("|An wen soll die Nachricht gehen?][[ReplyTo|[Absender]", scrap);
  267.         v.int := mtAlerts.Alert (1, scrap);
  268.         IF v.int = 1
  269.         THEN
  270.           MagicStrings.Assign (replyto, receiver);
  271.         ELSE
  272.           otherReceiver := FALSE;
  273.         END;
  274.       END;
  275.     ELSIF sender[0] # ''
  276.     THEN
  277.       (* Sender gesetzt *)
  278.       MagicStrings.Assign ("[2][CAT:|Diese Nachricht hat neben der Absenderadresse|auch noch einen Sender gesetzt.|Sender: ", scrap);
  279.       MagicStrings.Append (sender, scrap);
  280.       MagicStrings.Append ("|An wen soll die Nachricht gehen?][[Sender|[Absender]", scrap);
  281.       v.int := mtAlerts.Alert (1, scrap);
  282.       IF v.int = 1
  283.       THEN
  284.         MagicStrings.Assign (sender, receiver);
  285.         otherReceiver := TRUE;
  286.       END;
  287.     END;
  288.     IF (grin.ActualGroupNr(grinWdw) = dataSys.private) 
  289.       & ~otherReceiver
  290.     THEN
  291.       MagicStrings.Assign (refId, txt);
  292.       txt[40] := 0C; IF txt[39] # 0C THEN txt[39] := 03C END;
  293.       IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Antwort auf:',
  294.                                 txt, wgStr, TRUE) THEN
  295.         grin.grinNewState(grinWdw, 'B');
  296.         NewAnswer(refId, Betreff, receiver, mid, realName);
  297.       END
  298.     ELSE
  299.       IF receiver[0] = ''
  300.       THEN
  301.         MTE.info (MTE.noAnonym);
  302.         RETURN;
  303.       END;
  304.       IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr pers”nliche Antwort an:',
  305.                                 receiver, wgStr, TRUE) THEN
  306.         MakeLine();
  307.         NewAnsMessage(receiver, realName, orgGroup, Betreff, refId,txt, mid);
  308.         IF (grin.ActualGroupNr(grinWdw) = dataSys.private) 
  309.          & otherReceiver
  310.         THEN
  311.           (* Statusmeldung 'Gelesen' erzeugen, da Antwort als Crosskommentar
  312.            * an jemand anderen geht und die MAUS das dann nicht rafft! 
  313.            *)
  314.           grin.grinNewState(grinWdw, 'B');
  315.           SendState (refId, 'G');
  316.         END;
  317.       END;
  318.     END;
  319.   ELSIF result = otherGroup THEN
  320.     IF ListHelp.SelectGroup(Gr, z, TRUE, TRUE, FALSE, ListHelp.gsmWrite) 
  321.     THEN
  322.       MagicStrings.Assign ('', receiver);
  323.       IF (z # dataSys.private) 
  324.       THEN IF BetreffHolen(grinWdw, Betreff, 'Stichwort fr Kommentar in andere Gruppe:',
  325.                                      Gr, wgStr, TRUE) THEN
  326.           MakeLine();
  327.           CatGlobal.OpenName[0] := 'G';
  328.           grin.ActualFrom (grinWdw, receiver);
  329.           NewKomMessage(orgGroup, Gr, Betreff, refId, txt, mid, receiver, realName);
  330.         END;
  331.       ELSIF ListHelp.SelectName (receiver) &
  332.             BetreffHolen (grinWdw, Betreff, 'Stichwort fr pers”nliche Antwort an:',
  333.                           receiver, wgStr, TRUE)
  334.       THEN
  335.         (* Gruppe = dataSys.private *)
  336.         MakeLine();
  337.         CatGlobal.OpenName[0] := 'G';
  338.         NewAnsMessage(receiver, realName, orgGroup, Betreff, refId,txt, mid);
  339.       END;
  340.     END;
  341.   END
  342. END HandleCommentResult;
  343.  
  344. VAR oldComment : CatTypes.String255;
  345.  
  346. PROCEDURE GetCommentLine(VAR str : ARRAY OF CHAR; copy : BOOLEAN):BOOLEAN;
  347. VAR  scrap : CatTypes.String255;
  348.      but   : INTEGER;
  349.      ok    : BOOLEAN;
  350. BEGIN
  351.   IF copy THEN
  352.     mtUtils.SetObjcStringAdr(system, MausTauschrsc.systitle, CADR(sysStrTwo));
  353.   ELSE
  354.     mtUtils.SetObjcStringAdr(system, MausTauschrsc.systitle, CADR(sysStrThree));
  355.   END;
  356.   mtUtils.ObjcString(system, MausTauschrsc.sysstr, scrap);
  357.   mtUtils.SetObjcString(system, MausTauschrsc.sysstr, oldComment);
  358.   REPEAT
  359.     but := FormHandle (system);
  360.     IF but # MausTauschrsc.sysabruc
  361.     THEN
  362.       mtUtils.ObjcString(system, MausTauschrsc.sysstr, str);
  363.       ok := LENGTH (str) <= 79;
  364.       IF ~ok 
  365.       THEN
  366.         MTE.info (MTE.longCopy);
  367.       END;
  368.     ELSE
  369.       ok := TRUE;
  370.     END;
  371.   UNTIL ok;
  372.   IF but # MausTauschrsc.sysabruc THEN
  373.     MagicStrings.Assign(str, oldComment);
  374.     mtUtils.SetObjcString(system, MausTauschrsc.sysstr, scrap);
  375.     RETURN TRUE;
  376.   ELSE
  377.     mtUtils.SetObjcString(system, MausTauschrsc.sysstr, scrap);
  378.     RETURN FALSE
  379.   END;
  380. END GetCommentLine;
  381.  
  382. PROCEDURE HandleCopyResult(grinWdw: INTEGER; result : ActionType);
  383. VAR Kommentar : CatTypes.String255;
  384.     name      : CatTypes.String255;
  385.     scrap     : CatTypes.String1023;
  386. BEGIN
  387.   MagicStrings.Assign ("", name);
  388.   IF GetCommentLine(Kommentar, result = copy) & ListHelp.SelectName(name) THEN
  389.     grin.ActualID(grinWdw, scrap);
  390.     CopyOrForwardMessage (scrap, name, "", Kommentar, result = copy);
  391.   END
  392. END HandleCopyResult;
  393.  
  394. PROCEDURE Handle(grinWdw: INTEGER; what : ActionType);
  395. BEGIN
  396.   IF (what = comment) OR (what = answer) OR (what = otherGroup) THEN
  397.     HandleCommentResult (grinWdw, what)
  398.   ELSIF (what = copy) OR (what = pass) THEN
  399.     HandleCopyResult (grinWdw, what)
  400.   END;
  401. END Handle;
  402.  
  403. PROCEDURE Init(w, s : ADDRESS);
  404. (* Objektbaum der Betreffauswahlbox *)
  405. BEGIN
  406.   wegen  := w;
  407.   system := s;
  408.   oldComment := ""; 
  409. END Init;
  410.  
  411. END grinTools.
  412.